package com.promote.algorithm;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName FirstUniqChar
 * Description 字符串中的第一个唯一字符
 * @Author LiZiHao
 * Date 2022/3/11 10:36
 * @Version 1.0
 **/
public class FirstUniqChar {
    /**
     * 给定一个字符串 s ，找到 它的第一个不重复的字符，并返回它的索引 。如果不存在，则返回 -1 。
     * @param s
     * @return
     */
    public static int firstUniqChar(String s) {
        int[] count = new int[26];
        char[] chars = s.toCharArray();
        //先统计每个字符出现的次数

        for (int i = 0; i < s.length(); i++) {
            count[chars[i] - 'a']++;
        }

        //遍历字符串中的字符
        for (int i = 0; i < s.length(); i++) {
            if (count[chars[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 用hashmap的形式解决
     * @param s
     * @return
     */
    public static int firstUniqChar1(String s) {
        Map<Character, Integer> map = new HashMap<>();
        char[] chars = s.toCharArray();

        for (char ch: chars) {
            map.put(ch,map.getOrDefault(ch,0)+1);
        }

        for (int i = 0; i < s.length(); i++) {
            if (map.get(chars[i]) == 1) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 用java Api的形式
     * @param s
     * @return
     */
    public static int firstUniqChar2(String s) {
        for (int i = 0; i < s.length(); i++) {
            if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
                return i;
            }
        }
        return -1;
    }
    public static void main(String[] args) {
        String s = "loveleetcode";

        int res = firstUniqChar1(s);

        System.out.println(res);
    }
}
